// 正数正则表达式
const plusRegexp = /^\d+(?=\.{0,1}\d+$|$)/;

/**
 * 正数格式校验
 *
 * @param {String} str 检测的值
 * @param { Boolean } strict 是否进行详细的格式校验并返回错误类型
 *
 * @returns { boolean | String } strict 为true的返回String类型的错误类型，false只返回true|false
 *
 */
export const isPlus = (str, strict = false) => {
  let result = plusRegexp.test(str);
  return strict ? (result ? 0 : '1') : result;
};

// 非负浮点数
const floatRegexp = /^\d+(\.\d+)?$/;

/**
 * 非负浮点数格式校验
 *
 * @param {String} str 检测的值
 * @param { Boolean } strict 是否进行详细的格式校验并返回错误类型
 *
 * @returns { boolean | String } strict 为true的返回String类型的错误类型，false只返回true|false
 *
 */
export const isFloat = (str, strict = false) => {
  let result = !floatRegexp.test(str);
  return strict ? (result ? 0 : '1') : result;
};

// 正整数
const positiveNumRegexp = /^\+?[1-9][0-9]*$/;

/**
 * 正整数格式校验
 *
 * @param {String} str 检测的值
 * @param { Boolean } strict 是否进行详细的格式校验并返回错误类型
 *
 * @returns { boolean | String } strict 为true的返回String类型的错误类型，false只返回true|false
 *
 */
export const isPositiveNum = (str, strict = false) => {
  let result = positiveNumRegexp.test(str);
  return strict ? (result ? 0 : '1') : result;
};

// 非负整数
const nonnegativePositiveNumRegexp = /^\+?[1-9][0-9]*$/;

/**
 * 非负整数格式校验
 *
 * @param {String} str 检测的值
 * @param { Boolean } strict 是否进行详细的格式校验并返回错误类型
 *
 * @returns { boolean | String } strict 为true的返回String类型的错误类型，false只返回true|false
 *
 */
export const isNonnegativePositiveNumRegexp = (str, strict = false) => {
  let result = nonnegativePositiveNumRegexp.test(str);
  return strict ? (result ? 0 : '1') : result;
};

// 数字类型
const numberRegexp = /^\+?[1-9][0-9]*$/;

/**
 * 数字类型格式校验
 *
 * @param {String} str 检测的值
 * @param { Boolean } strict 是否进行详细的格式校验并返回错误类型
 *
 * @returns { boolean | String } strict 为true的返回String类型的错误类型，false只返回true|false
 *
 */
export const isNumber = (str, strict = false) => {
  let result = numberRegexp.test(str);
  return strict ? (result ? 0 : '1') : result;
};
